export const createindexDB = (props) => {

    //1-我们先创建一个对象，放一些数据比如dbInfo ，可以设置数据库名字dbName，数据库的版本dbVersion 

    var dbInfo = {
        dbName: "Hottest",
        dbVersion: 2021,
        dbInstance: {}
    };

    //2-创建数据库 indexedDB.open方法用于打开数据库。返回的是一个对象，第一个参数是数据库名称，格式为字符串。第二个参数是数据库版本。

    var openRequest = window.indexedDB.open(dbInfo.dbName, dbInfo.dbVersion);

    //3-创建数据库时会处罚三个事件之一，这三个事件，分别是upgradeneeded，success，onerror，意思就不说了吧，不懂得可以用字典查嘛。

    openRequest.onupgradeneeded = function (e) { //第一次打开数据库 ^-*

        console.log("第一次打开该数据库，或者数据库版本发生变化....");

        var db = e.target.result;
        var storeNames = db.objectStoreNames;

        //创建数据库的表格（或者叫数据库仓库）
        if (!storeNames.contains('articles')) {
            db.createObjectStore('articles', {
                keyPath: "article_id",
                autoIncrement: true
            })
        }
    }

    openRequest.onsuccess = function (e) { //success：打开成功^-^  
        console.log("数据库打开成功...");

        var db = e.target.result;
        var trans = db.transaction(["articles"], "readwrite");
        var store = trans.objectStore("articles");


        //4-这里面我要写很多要调用的函数了，比如，下面.....wu la wu la.....

        add_data(db, props);; //数据库中添加数据  
        // del_data(db);  //数据库中删除数据
        // deal_data(db); //读取数据
        // update_data(db, props);//更新数据（类似于Add方法）
        // traverse_data(db); //遍历数据

    }

    openRequest.onerror = function (e) { //error：打开失败*-*

        console.log("数据库打开失败...");
        console.dir(e);
    }
}

export const add_data = (db, props) => {
    var name = "添加数据"

    //1-把前面创建的数据库，传递过来 

    var db = db;

    //2-返回一个事务对象,indexDB 数据库只有  readwrite 以及readonly两个可爱的状态。 

    var tt = db.transaction(["articles"], "readwrite");

    //3-objectStore方法用于返回指定的对象仓库(数据库表格)对象。 

    var store = tt.objectStore("articles");

    //4-创建一个要添加的对象。          

    //5-添加数据：add方法的第一个参数是所要添加的数据，第二个参数是这条数据对应的键名（key）       

    var request = store.add(props);
    //6-添加数据：add方法也有两个事件，一个error一个success可以在回调函数中调用。
    request.onerror = function (e) {
        console.log("Error", e.target.error.name);
        // error handler
        console.log("数据添加失败...");
    }

    request.onsuccess = function (e) {
        // success handler
        console.log("数据添加成功...");

    }
}


export const getAllData = (callback) => {
    var dbInfo = {
        dbName: "Hottest",
        dbVersion: 2021,
        dbInstance: {}
    };

    var openRequest = window.indexedDB.open(dbInfo.dbName, dbInfo.dbVersion);
    openRequest.onsuccess = function (e) {
        var db = e.target.result;
        var trans = db.transaction(["articles"], "readwrite");
        var store = trans.objectStore("articles");
        let request = store.openCursor();
        let data = [];
        request.onerror = function () {
            console.error('getDataByKey error');
        };
        request.onsuccess = function (e) {
            let result = e.target.result;
            if (result && result !== null) {
                data.push(result.value);
                result.continue();
            } else {
                console.log('全部查找数据成功')
                callback(data)     
            }
        };
    
    }
    

}